package multiThread;

/**
 * @projectName: java-sample
 * @description:
 * @author: Adam
 * @create: 2019-12-30 14:24
 **/

/**
 * yield（屈服，让步，放弃） 方法表示当前正在执行的线程暂停，但他不会阻塞该线程（sleep方法会阻塞线程）,它只是将该线程转入就绪状态
 * 可能出现的情况，当某个线程调用了yield方法暂停之后，线程调度器又将其调出来重新执行
 * yield只会给同优先级或更高优先级的线程执行机会
 */
public class ThreadYield extends Thread{


    //定义一个有参数的构造器，用于创建线程时指定name
    public ThreadYield(String name){
        super(name);
    }


    public static void main(String[] args){
        //启动两个并发线程
        ThreadYield yt1 = new ThreadYield("高级");
        //高优先级的线程调用yield()方法暂停之后，系统中么米有与之优先级相同，或更高优先级的线程，所以该线程继续执行
        //将yt1线程设置成最高优先级 MAX_PRIORITY=10
        //yt1.setPriority(Thread.MAX_PRIORITY);
        yt1.start();

        ThreadYield yt2 = new ThreadYield("低级");
        //yt2.setPriority(Thread.MIN_PRIORITY); MIN_PRIORITY=1  NORM_PRIORITY=5
        //将yt2设置成最低优先级
        yt2.start();

    }


    @Override
    public void run() {
      for (int i=0; i<50; i++){
          System.out.println(getName()+" "+i);
          //当i=20的时候，使用yield()方法让当前线程让步
          if (i==20){
              ThreadYield.yield();
          }
      }
    }



}
